iT邦幫忙

2023 iThome 鐵人賽

DAY 29
0
Modern Web

起步Go!Let's Go!系列 第 29

[ Day 29 ] Go 與 Gin:打造強大的 Web 應用程式 (下)

  • 分享至 

  • xImage
  •  

昨天已經把 CR 完成了,今天將會完成CRUD中的UD,那我們就開始吧!!

CRUD 之 U

U 代表著更新 (update),這個功能其實就是把昨天 CR 結合再一起的功能,要先透過找到要修改的資料,並且把新的資料儲存在資料庫內,一樣到 main() 來增加相關的程式:

r.PUT("/posts/:id", func (c *gin.Context) {
    id := c.Param("id")
    var post model.Post

    if err := database.DB.First(&post, id).Error; err != nil {
        c.JSON(http.StatusNotFound, gin.H{
            "error": "Failed to fetch posts",
        })	
        return
    }

    if err := c.ShouldBindJSON(&post); err != nil {
        c.JSON(http.StatusBadRequest, gin.H{
            "error": "Bad request data",
        })
        return
    } 

    if err := database.DB.Save(&post).Error; err != nil {
        c.JSON(http.StatusInternalServerError, gin.H{
            "error": "Failed to update post",
        })
        return
    }

    c.JSON(http.StatusOK, gin.H{
        "message": "Post updated successfully",
    })
})

程式碼講解:

  • 設置一個路由 /posts/:id,使用 PUT 方法來更新文章。
  • 宣告一個 post 的變數,用於存儲從資料庫檢索到的文章。
  • 使用 GORM 中的 First(&post, id) 從資料庫中根據提供的 id 查找並檢索相應的文章。如果找不到指定 id 的文章,就會回應一個未找到的訊息。
  • 使用 ShouldBindJSON(&post) 將請求中的 JSON 數據綁定到 post 變數。如果解析 JSON 數據時出錯,回應一個請求數據無效的訊息。
  • 使用了 Save(&post) 將更新後的文章保存回資料庫。如儲存時出現錯誤,回應一個內部服務器錯誤的訊息。
  • 如果文章成功更新,回應一個成功更新的訊息。

打開 Postman,將請求改成 PUT 並且輸入 http://127.0.0.1:8080/posts/1 ,接著, Send。
update
用昨天的 Read 來看看是不是真的修改了,把請求改成 GET。
read
確實已經修改成剛剛修改的內容了。

CRUD 之 D

D 代表著刪除 (Delete),刪除也很簡單,概念跟更新很像,也是要先找到要刪除的貼文,接著將他刪除掉。在 main() 增加刪除貼文的程式碼:

r. DELETE("posts/:id", func(c *gin.Context) {
    id := c.Param("id")
    if err := database.DB.Delete(&model.Post{}, id).Error; err != nil {
        c.JSON(http.StatusNotFound, gin.H{
            "error": "Post not found",
        })
        return
    }

    c.JSON(http.StatusOK, gin.H{ 
        "message": "Delete post successfully",
    })
})

程式碼解釋:

  • 設置一個路由 /posts/:id,使用 DELETE 請求來刪除文章。
  • 從 URL 中提取了 id 參數,以便識別要刪除的文章。
  • 使用 Delete(&model.Post{}, id) 方法從資料庫中刪除指定 id 的文章。
  • 如果在刪除過程中出現了錯誤(例如找不到指定 id 的文章),則返回一個未找到的響應(404)。
  • 如果文章成功刪除,則返回一個成功刪除的響應(200)。

打開 Postman,將請求改成 Delete 並且輸入 http://127.0.0.1:8080/posts/1 ,並 Send。
delete
出現這個回應就代表成功刪除了。我們再回去 Read 看看這邊貼文是否被刪除了。
not found post
這邊可以看到,回應為 Failed to fetch posts ,這就代表已經成功刪除貼文了。

今天的內容已經更新到 Github了,到這邊 CRUD 也介紹完了,相信大家都已經成功完成了,當然 Gin 和 GORM 還有很多功能還沒說完,這部分就交給各位去慢慢摸索囉!


上一篇
[ Day 28 ] Go 與 Gin:打造強大的 Web 應用程式 (中)
下一篇
[ Day 30 ] 就是要不斷 Go
系列文
起步Go!Let's Go!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言